package cz.muni.fi.pa165.travelagency.api.entities;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 *
 * @author ljungman
 */
public interface ITour extends Serializable {

    /**
     * Returns <code>IPackageTour<code> which contains this
     * @return associated <code>IPackageTour<code>
     */
    IPackageTour getAssociatedTour();

    /**
     * Returns how many persons can order this
     * @return capacity
     */
    int getCapacity();

    /**
     * Returns date when this <code>ITour</code> occurs
     * @return date of <code>ITour</code>
     */
    Date getDate();

    /**
     * Returns description of this <code>ITour</code>
     * @return description
     */
    String getDescription();

    /**
     * Returns how long is this <code>ITour</code> in hours
     * @return duration in hours
     */
    int getDuration();

    /**
     * Returns id of this <code>ITour</code>
     * @return id
     */
    Long getId();

    /**
     * Returns name of this <code>ITour</code>
     * @return name
     */
    String getName();

    /**
     * Returns list of <code>IOrder</code>s which contain this <code>ITour</code>
     * @return list of <code>IOrder</code>s
     */
    List<IOrder> getOrders();

    /**
     * Returns price per person for this <code>ITour</code>
     * @return price per person
     */
    BigDecimal getPricePerPerson();

    /**
     * Sets <code>IPackageTour</code> which contains this <code>ITour</code>
     * @param associatedTour associated <code>IPackageTour</code>
     */
    void setAssociatedTour(IPackageTour associatedTour);

    /**
     * Sets how many persons can order this <code>ITour</code>
     * @param capacity capacity in persons
     */
    void setCapacity(int capacity);

    /**
     * Sets date when this takes place
     * @param date 
     */
    void setDate(Date date);

    /**
     * Sets description of this <code>ITour</code>
     * @param description 
     */
    void setDescription(String description);

    /**
     * Sets duration of this <code>ITour</code>
     * @param duration 
     */
    void setDuration(int duration);

    /**
     * Sets id of this <code>ITour</code>
     * @param id 
     */
    void setId(Long id);

    /**
     * Sets name of this <code>ITour</code>
     * @param name 
     */
    void setName(String name);

    /**
     * Sets list of <code>IOrder</code>s which contain this <code>ITour</code>
     * @param orders list of <code>IOrder</code>s containing this 
     */
    void setOrders(List<IOrder> orders);

    /**
     * Sets price per person for this <code>ITour</code>
     * @param pricePerPerson  
     */
    void setPricePerPerson(BigDecimal pricePerPerson);
}
